/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was generated from a ReactOS header to make
 ***   information necessary for userspace to call into the Windows
 ***   kernel available to Dr. Memory.  It contains only constants,
 ***   structures, and macros generated from the original header, and
 ***   thus, contains no copyrightable information.
 ***
 ****************************************************************************
 ****************************************************************************/

/* from reactos/include/psdk/prntfont.h */

/*
 * prntfont.h
 *
 * Declarations for Windows NT printer driver font metrics
 *
 * This file is part of the w32api package.
 *
 * Contributors:
 *   Created by Filip Navara <xnavara@volny.cz>
 *
 * THIS SOFTWARE IS NOT COPYRIGHTED
 *
 * This source code is offered for use in the public domain. You may
 * use, modify or distribute it freely.
 *
 * This code is distributed in the hope that it will be useful but
 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 * DISCLAIMED. This includes but is not limited to warranties of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 */

#ifndef __PRNTFONT_H
#define __PRNTFONT_H

#define UNIFM_VERSION_1_0 0x10000
#define UNI_GLYPHSETDATA_VERSION_1_0 0x10000

#define UFM_SOFT 1
#define UFM_CART 2
#define UFM_SCALABLE 4

#define DF_TYPE_HPINTELLIFONT 0
#define DF_TYPE_TRUETYPE 1
#define DF_TYPE_PST1 2
#define DF_TYPE_CAPSL 3
#define DF_TYPE_OEM1 4
#define DF_TYPE_OEM2 5
#define DF_NOITALIC 1
#define DF_NOUNDER 2
#define DF_XM_CR 4
#define DF_NO_BOLD 8
#define DF_NO_DOUBLE_UNDERLINE 16
#define DF_NO_STRIKETHRU 32
#define DF_BKSP_OK 64

#define MTYPE_COMPOSE 1
#define MTYPE_DIRECT 2
#define MTYPE_PAIRED 4
#define MTYPE_FORMAT_MASK 7
#define MTYPE_SINGLE 8
#define MTYPE_DOUBLE 16
#define MTYPE_DOUBLEBYTECHAR_MASK 24
#define MTYPE_REPLACE 32
#define MTYPE_ADD 64
#define MTYPE_DISABLE 128
#define MTYPE_PREDEFIN_MASK 192

#define CC_NOPRECNV 0x0000FFFF
#define CC_DEFAULT 0
#define CC_CP437 -1
#define CC_CP850 -2
#define CC_CP863 -3
#define CC_BIG5 -10
#define CC_ISC -11
#define CC_JIS -12
#define CC_JIS_ANK -13
#define CC_NS86 -14
#define CC_TCA -15
#define CC_GB2312 -16
#define CC_SJIS -17
#define CC_WANSUNG -18

#define UFF_FILE_MAGIC 'UFF1'
#define UFF_VERSION_NUMBER 0x10001
#define FONT_DIR_SORTED 1
#define FONT_REC_SIG 'CERF'
#define WINNT_INSTALLER_SIG 'IFTN'

#define FONT_FL_UFM 0x0001
#define FONT_FL_IFI 0x0002
#define FONT_FL_SOFTFONT 0x0004
#define FONT_FL_PERMANENT_SF 0x0008
#define FONT_FL_DEVICEFONT 0x0010
#define FONT_FL_GLYPHSET_GTT 0x0020
#define FONT_FL_GLYPHSET_RLE 0x0040
#define FONT_FL_RESERVED 0x8000

#define DATA_UFM_SIG 'MFUD'
#define DATA_IFI_SIG 'IFID'
#define DATA_GTT_SIG 'TTGD'
#define DATA_CTT_SIG 'TTCD'
#define DATA_VAR_SIG 'RAVD'

#define FG_CANCHANGE 128
#define WM_FI_FILENAME 900

#define GET_UNIDRVINFO(pUFM) ((PUNIDRVINFO)((ULONG_PTR)(pUFM) + (pUFM)->loUnidrvInfo))
#define GET_IFIMETRICS(pUFM) ((IFIMETRICS *)((ULONG_PTR)(pUFM) + (pUFM)->loIFIMetrics))
#define GET_EXTTEXTMETRIC(pUFM) \
    ((EXTTEXTMETRIC *)((ULONG_PTR)(pUFM) + (pUFM)->loExtTextMetric))
#define GET_WIDTHTABLE(pUFM) ((PWIDTHTABLE)((ULONG_PTR)(pUFM) + (pUFM)->loWidthTable))
#define GET_KERNDATA(pUFM) ((PKERNDATA)((ULONG_PTR)(pUFM) + (pUFM)->loKernPair))
#define GET_SELECT_CMD(pUni) ((PCHAR)(pUni) + (pUni)->SelectFont.loOffset)
#define GET_UNSELECT_CMD(pUni) ((PCHAR)(pUni) + (pUni)->UnSelectFont.loOffset)
#define GET_GLYPHRUN(pGTT) \
    ((PGLYPHRUN)((ULONG_PTR)(pGTT) + ((PUNI_GLYPHSETDATA)pGTT)->loRunOffset))
#define GET_CODEPAGEINFO(pGTT) \
    ((PUNI_CODEPAGEINFO)((ULONG_PTR)(pGTT) + ((PUNI_GLYPHSETDATA)pGTT)->loCodePageOffset))
#define GET_MAPTABLE(pGTT) \
    ((PMAPTABLE)((ULONG_PTR)(pGTT) + ((PUNI_GLYPHSETDATA)pGTT)->loMapTableOffset))

typedef struct _UNIFM_HDR {
    DWORD dwSize;
    DWORD dwVersion;
    ULONG ulDefaultCodepage;
    LONG lGlyphSetDataRCID;
    DWORD loUnidrvInfo;
    DWORD loIFIMetrics;
    DWORD loExtTextMetric;
    DWORD loWidthTable;
    DWORD loKernPair;
    DWORD dwReserved[2];
} UNIFM_HDR, *PUNIFM_HDR;

typedef struct _INVOC {
    DWORD dwCount;
    DWORD loOffset;
} INVOC, *PINVOC;

typedef struct _UNIDRVINFO {
    DWORD dwSize;
    DWORD flGenFlags;
    WORD wType;
    WORD fCaps;
    WORD wXRes;
    WORD wYRes;
    SHORT sYAdjust;
    SHORT sYMoved;
    WORD wPrivateData;
    SHORT sShift;
    INVOC SelectFont;
    INVOC UnSelectFont;
    WORD wReserved[4];
} UNIDRVINFO, *PUNIDRVINFO;

typedef struct _EXTTEXTMETRIC {
    SHORT emSize;
    SHORT emPointSize;
    SHORT emOrientation;
    SHORT emMasterHeight;
    SHORT emMinScale;
    SHORT emMaxScale;
    SHORT emMasterUnits;
    SHORT emCapHeight;
    SHORT emXHeight;
    SHORT emLowerCaseAscent;
    SHORT emLowerCaseDescent;
    SHORT emSlant;
    SHORT emSuperScript;
    SHORT emSubScript;
    SHORT emSuperScriptSize;
    SHORT emSubScriptSize;
    SHORT emUnderlineOffset;
    SHORT emUnderlineWidth;
    SHORT emDoubleUpperUnderlineOffset;
    SHORT emDoubleLowerUnderlineOffset;
    SHORT emDoubleUpperUnderlineWidth;
    SHORT emDoubleLowerUnderlineWidth;
    SHORT emStrikeOutOffset;
    SHORT emStrikeOutWidth;
    WORD emKernPairs;
    WORD emKernTracks;
} EXTTEXTMETRIC, *PEXTTEXTMETRIC;

typedef struct _WIDTHRUN {
    WORD wStartGlyph;
    WORD wGlyphCount;
    DWORD loCharWidthOffset;
} WIDTHRUN, *PWIDTHRUN;

typedef struct _WIDTHTABLE {
    DWORD dwSize;
    DWORD dwRunNum;
    WIDTHRUN WidthRun[1];
} WIDTHTABLE, *PWIDTHTABLE;

typedef struct _KERNDATA {
    DWORD dwSize;
    DWORD dwKernPairNum;
    FD_KERNINGPAIR KernPair[1];
} KERNDATA, *PKERNDATA;

typedef struct _UNI_GLYPHSETDATA {
    DWORD dwSize;
    DWORD dwVersion;
    DWORD dwFlags;
    LONG lPredefinedID;
    DWORD dwGlyphCount;
    DWORD dwRunCount;
    DWORD loRunOffset;
    DWORD dwCodePageCount;
    DWORD loCodePageOffset;
    DWORD loMapTableOffset;
    DWORD dwReserved[2];
} UNI_GLYPHSETDATA, *PUNI_GLYPHSETDATA;

typedef struct _UNI_CODEPAGEINFO {
    DWORD dwCodePage;
    INVOC SelectSymbolSet;
    INVOC UnSelectSymbolSet;
} UNI_CODEPAGEINFO, *PUNI_CODEPAGEINFO;

typedef struct _GLYPHRUN {
    WCHAR wcLow;
    WORD wGlyphCount;
} GLYPHRUN, *PGLYPHRUN;

typedef struct _TRANSDATA {
    BYTE ubCodePageID;
    BYTE ubType;
    union {
        SHORT sCode;
        BYTE ubCode;
        BYTE ubPairs[2];
    } uCode;
} TRANSDATA, *PTRANSDATA;

typedef struct _MAPTABLE {
    DWORD dwSize;
    DWORD dwGlyphNum;
    TRANSDATA Trans[1];
} MAPTABLE, *PMAPTABLE;

typedef struct _UFF_FILEHEADER {
    DWORD dwSignature;
    DWORD dwVersion;
    DWORD dwSize;
    DWORD nFonts;
    DWORD nGlyphSets;
    DWORD nVarData;
    DWORD offFontDir;
    DWORD dwFlags;
    DWORD dwReserved[4];
} UFF_FILEHEADER, *PUFF_FILEHEADER;

typedef struct _UFF_FONTDIRECTORY {
    DWORD dwSignature;
    WORD wSize;
    WORD wFontID;
    SHORT sGlyphID;
    WORD wFlags;
    DWORD dwInstallerSig;
    DWORD offFontName;
    DWORD offCartridgeName;
    DWORD offFontData;
    DWORD offGlyphData;
    DWORD offVarData;
} UFF_FONTDIRECTORY, *PUFF_FONTDIRECTORY;

typedef struct _DATA_HEADER {
    DWORD dwSignature;
    WORD wSize;
    WORD wDataID;
    DWORD dwDataSize;
    DWORD dwReserved;
} DATA_HEADER, *PDATA_HEADER;

typedef struct _OEMFONTINSTPARAM {
    DWORD cbSize;
    HANDLE hPrinter;
    HANDLE hModule;
    HANDLE hHeap;
    DWORD dwFlags;
    PWSTR pFontInstallerName;
} OEMFONTINSTPARAM, *POEMFONTINSTPARAM;

#endif /* __PRNTFONT_H */
